Thiết kế Lightning Network

Các kênh thanh toán cho phép người tham gia chuyển tiền cho nhau mà không phải thực hiện tất cả các giao dịch công khai trên blockchain. Điều này được thực hiện bằng cách phạt những người đã tham gia mà không hợp tác. Khi mở một kênh, người tham gia phải cam kết một khoản tiền (trong một giao dịch góp vốn trên blockchain). Các đoạn mã mở rộng của Segwit dựa trên thời gian như CheckSequenceVerifyCheckLockTimeVerify giúp điều này được thực thi tự động trên blockchain.

Giả sử tồn tại một mạng lưới lớn các kênh thanh toán trên blockchain Bitcoin, và tất cả người dùng Bitcoin đang tham gia vào mạng lưới này bằng cách mở ít nhất một kênh trên Bitcoin blockchain, thì chúng ta có thể tạo ra một số lượng gần vô hạn các giao dịch bên trong mạng này. Các giao dịch duy nhất cần phải ghi lại vào Bitcoin blockchain sớm là với các đối tác trong kênh mà không hợp tác.

— Lightning Paper[3]

Phiên bản Bitcoin Improvement Proposal CheckSequenceVerify (CSV) ghi rõ cách thực thi hợp đồng Hash Time-Locked trong CSV và được sử dụng cho giao dịch Lightning.[4]

Giao dịch Cam kết

Tổng quan về Lightning Network

Nếu Alice và Bob thiết lập một kênh thanh toán, cả hai đều sẽ có sở hữu phiên bản giao dịch cam kết "mới nhất". Giao dịch cam kết phân chia các khoản tiền từ giao dịch góp vốn theo phân bổ chính xác giữa Alice và Bob. Ví dụ: nếu Alice sở hữu 1.0 mBTC và Bob sở hữu 1.0 mBTC trong kênh, các giao dịch cam kết sẽ chia tổng vốn của kênh theo cách đó.

Giao dịch cam kết cho phép nhiều người dùng tham gia vào một giao dịch đơn lẻ (và do đó hoạt động như một thực thể đơn lẻ) sử dụng một hệ thống đa điểm. Việc xác định tắc nghẽn chủ yếu dựa vào các thợ mỏ, do đó, mạng lưới này dựa trên giả định rằng thợ mỏ trung thực sẽ không tổ chức một cuộc tấn công 51%.[5]

Vì các giao dịch cam kết chi tiêu tiền góp vốn nên chúng phải được ký bởi cả hai đối tác.

Các giao dịch cam kết là một cặp giao dịch bất đối xứng. Giao dịch cam kết của Alice bao gồm hai đầu ra: một trong đó trả Bob hoàn toàn, và cái còn lại là một đầu ra bị khóa thời gian (timelocked) và có thể bị truy hồi, mà cuối cùng sẽ trả lại Alice. Đầu ra này có thể bị Bob thu hồi nếu Bob biết khóa thu hồi. Giao dịch cam kết của Bob thì ngược lại: nó trả hoàn toàn cho Alice, nhưng trả phần của Bob dưới một đầu ra bị khóa thời gian, có thể bị truy hồi; nếu Alice biết khóa thu hồi đối với giao dịch cam kết của Bob, cô ấy có thể thu hồi nó.

Ban đầu, Alice giữ giao dịch cam kết A 1 {\displaystyle A_{1}} , Bob giữ giao dịch cam kết B 1 {\displaystyle B_{1}} . Alice biết khóa thu hồi cho giao dịch A 1 {\displaystyle A_{1}} là R A 1 {\displaystyle R_{A_{1}}} , nhưng Bob không biết. Ngược lại, Bob biết khóa thu hồi cho giao dịch B 1 {\displaystyle B_{1}} là R B 1 {\displaystyle R_{B_{1}}} mà Alice không biết.

Giả sử Alice muốn trả 0,25 mBTC cho Bob (trước giao dịch này, Alice và Bob mỗi người có 1 mBTC):

  1. Alice tạo một giao dịch mới của Bob là B 2 {\displaystyle B_{2}} , mà chuyển 0.75 mBTC tới Alice và 1.25 mBTC tới Bob.
  2. Alice ký B 2 {\displaystyle B_{2}} và gửi tới Bob.
  3. Bob nhận B 2 {\displaystyle B_{2}} , ký và giữ nó.
  4. Bob tạo một giao dịch mới của Alice là A 2 {\displaystyle A_{2}} , mà chuyển 0.75 mBTC tới Alice và 1.25 mBTC tới Bob.
  5. Bob ký A 2 {\displaystyle A_{2}} và gửi tới Alice.
  6. Alice nhận A 2 {\displaystyle A_{2}} , ký và giữ nó.
  7. Alice cung cấp R A 1 {\displaystyle R_{A_{1}}} , hủy A 1 {\displaystyle A_{1}} ; sau đó Alice có thể xóa A 1 {\displaystyle A_{1}} .
  8. Bob cung cấp R B 1 {\displaystyle R_{B_{1}}} , hủy B 1 {\displaystyle B_{1}} ; sau đó Bob có thể xóa B 1 {\displaystyle B_{1}} .

Tài liệu tham khảo

WikiPedia: Lightning Network http://bitcoinist.com/bitcoin-lightning-network-is... http://bitcoinist.com/bitcoin-lightning-network-ma... http://lightning.community/release/software/lnd/li... http://dev.lightning.community/ https://bitcoinmagazine.com/articles/understanding... https://www.coindesk.com/blockstream-launches-micr... https://www.coindesk.com/lightning-network-may-not... https://www.coindesk.com/payment-provider-bitrefil... https://github.com/ACINQ/eclair https://github.com/ElementsProject/lightning